package com.ntd.study.coding.standards;

/**
 * 单元测试
 * @author liuwenju
 * @date 2021/3/26
 */
public class StudyUnitTest {
    /**
     * 1. 好的单元测试必须遵守 AIR 原则
     * |-- 1) 单元测试在线上运行时，感觉像空气（AIR）一样并不存在，但在测试质量的保障上，却是非常关键的。好的单元测试宏观上来说，具有自动化、独立性、可重复执行的特点
     * 2. 单元测试应该是全自动执行的，并且非交互式的
     * 3. 测试用例通常是被定期执行的，执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试
     * 4. 单元测试中不准使用 System.out 来进行人肉验证，必须使用 assert 来验证
     * 5. 保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护，单元测试用例之间决不能互相调用，也不能依赖执行的先后次序
     * 6. 单元测试是可以重复执行的，不能受到外界环境的影响
     * 7. 对于单元测试，要保证测试粒度足够小，有助于精确定位问题。单测粒度至多是类级别，一般是方法级别
     * 8. 核心业务、核心应用、核心模块的增量代码确保单元测试通过
     * 9. 单元测试代码必须写在如下工程目录：src/test/java，不允许写在业务代码目录下
     * 10. 单元测试的基本目标：语句覆盖率达到 70%；核心模块的语句覆盖率和分支覆盖率都要达到 100%
     * 11. 编写单元测试代码遵守 BCDE 原则，以保证被测试模块的交付质量
     * |-- 1) B：Border，边界值测试，包括循环边界、特殊取值、特殊时间点、数据顺序等
     * |-- 2) C：Correct，正确的输入，并得到预期的结果
     * |-- 3) D：Design，与设计文档相结合，来编写单元测试
     * |-- 4) E：Error，强制错误信息输入（如：非法数据、异常流程、业务允许外等），并得到预期的结果
     * 12. 对于数据库相关的查询，更新，删除等操作，不能假设数据库里的数据是存在的，或者直接操作数据库把数据插入进去，请使用程序插入或者导入数据的方式来准备数据
     * 13. 和数据库相关的单元测试，可以设定自动回滚机制，不给数据库造成脏数据。或者对单元测试产生的数据有明确的前后缀标识
     * 14. 对于不可测的代码在适当的时机做必要的重构，使代码变得可测，避免为了达到测试要求而书写不规范测试代码
     * 15. 在设计评审阶段，开发人员需要和测试人员一起确定单元测试范围，单元测试最好覆盖所有测试用例
     * 16. 单元测试作为一种质量保障手段，在项目提测前完成单元测试，不建议项目发布后补充单元测试用例
     * @param args
     */
    public static void main(String[] args) {

    }
}
